<!--
/*
 *	Author: José Delgado Pérez
 *	Correo: josedelgado@ula.ve
 *	Fecha: 04/05/2012
 *	Encoding: UTF-8
 *  Comentario: Objeto Latex, posee los atributos del archivo latex que se esta
 *  generando asi como los metodos de construccion llenado y manipulacion de estos
 *	atributos. 
 */
-->

<?php
include_once ("/includes/SimpleXmlExtended.class.php");

class Latex {
	private $documentclass;
	private $usepackage;
	private $configuracion;
	private $documento = Array (
		'inicio' => '',
		'fin' => ''
	);
	private $encabezado = Array(
		'inicioEncabezado' => '',
		'nombre' => Array (
			'titulo' => '',
			'texto' => '',
			'finfila' => ''
		),
		'cedula' => Array (
			'titulo' => '',
			'texto' => '',
			'finfila' => ''
		),
		'finEncabezado' => ''
	);
	private $membrete;
	private $cargaAcadimica = Array(
		'encabezado' => '',
		'inicio' => '',
		'materiasPregrado' => Array(
			'inicio' => '',
			'materias' => Array(), 
			'totalHoras' => Array(
				'titulo' => '',
				'horas' => ''
			),
			'fin' => ''
		),
		'materiasPostgrado' => Array(
			'inicio' => '',
			'materias' =>  Array(), 
			'totalHoras' => Array(
				'titulo' => '',
				'horas' => ''
			),
			'fin' => ''
		),
		'cargaTutorias' => Array(
			'inicio' => '',
			'tesisPregrado' => Array(
				'inicio' => '',
				'trabajos' => Array(),
				'fin' => ''
			),
			'pasantias' => Array(
				'inicio' => '',
				'trabajos' => Array(),
				'fin' => ''
			),
			'tesisPostgrado' => Array(
				'inicio' => '',
				'trabajos' => Array(),
				'fin' => ''
			),
			'totalHoras' => Array(
				'titulo' => '',
				'horas' => ''
			),
			'fin' => ''
		),
		'cargaSC' => Array(
			'inicio' => '',
			'proyectos' => Array(),
			'totalHoras' => Array(
				'titulo' => '',
				'horas' => ''
			),
			'fin' => ''
		),
		'totalCargaAcademica' => Array(
			'inicio' => '',
			'horas' => '',
			'fin' => ''
		),	
		'fin' => ''
	);
	private $cargaInvestigacion = Array(
		'inicio' => '',
		'trabajo' => '',
		'fin' => '',
		'totalCargaAcademica' => Array(
			'inicio' => '',
			'horas' => '',
			'fin' => ''
		)	
	);
	private $cargaExtencion = Array(
		'inicio' => '',
		'trabajo' => '',
		'fin' => '',
		'totalCargaAcademica' => Array(
			'inicio' => '',
			'horas' => '',
			'fin' => ''
		)	
	);
	private $cargaAdministrativa = Array(
		'inicio' => '',
		'trabajo' => Array(),
		'fin' => '',
		'totalCargaAcademica' => Array(
			'inicio' => '',
			'horas' => '',
			'fin' => ''
		)	
	);
	private $cargaGremial = Array(
		'inicio' => '',
		'trabajo' => Array(),
		'fin' => '',
		'totalCargaAcademica' => Array(
			'inicio' => '',
			'horas' => '',
			'fin' => ''
		)	
	);
	private $piePagina = Array(
		'inicio' => '',
		'horas' => '',
		'fin' => ''
	);
	private $rutaXML = "data/latex.xml";
	private $xml;

	# CONSTRUCTOR

	public function __construct() {
		$this->cargarXML();
	}

	#CARGAMOS XML  

	private function cargarXML() {
		$this->xml = simplexml_load_file($this->rutaXML);
	}

	#DEFINIMOS LOS GETS

	public function getDocumentclass() {
		return $this->documentclass;
	}

	public function getUsepackage() {
		return $this->usepackage;
	}

	public function getConfiguracion() {
		return $this->configuracion;
	}

	public function getDocumento() {
		return $this->documento;
	}
	
	public function getMembrete() {
		return $this->membrete;
	}
	
	public function getEncabezado() {
		return $this->encabezado;
	}
	
	public function getCargaAcademica() {
		return $this->cargaAcadimica;
	}
	
	public function getCargaInvestigacion() {
		return $this->cargaInvestigacion;
	}
	
	public function getCargaExtencion() {
		return $this->cargaExtencion;
	}
	
	public function getCargaAdministrativa() {
		return $this->cargaAdministrativa;
	}
	
	public function getCargaGremial() {
		return $this->cargaGremial;
	}
	
	public function getPiePagina(){
		return $this->piePagina;
	}
	
	#DEFINIMOS LOS SETS

	public function setDocumentclass($documentclass) {
		$this->documentclass = $documentclass;
	}

	public function setUsepackage($usepackage) {
		$this->usepackage = $usepackage;
	}

	public function setConfiguracion($configuracion) {
		$this->configuracion = $configuracion;
	}

	public function setDocumento($documento) {
		$this->documento = $documento;
	}
	
	public function setEncabezado($encabezado) {
		$this->encabezado = $encabezado;
	}
	
	public function setMembrete($membrete) {
		$this->membrete = $membrete;
	}

	public function setCargaAcademica($cargaAcadimica) {
		$this->cargaAcadimica = $cargaAcadimica;
	}
	
	public function setCargaInvestigacion($cargaInvestigacion) {
		$this->cargaInvestigacion = $cargaInvestigacion;
	}
	
	public function setCargaExtencion($cargaExtencion) {
		$this->cargaExtencion = $cargaExtencion;
	}
	
	public function setCargaAdministrativa($cargaAdministrativa) {
		$this->cargaAdministrativa = $cargaAdministrativa;
	}
	
	public function setCargaGremial($cargaGremial) {
		$this->cargaGremial = $cargaGremial;
	}
	
	public function setPiePagina($piePagina){
		$this->piePagina = $piePagina;
	}
	
	#EXTRAER EL LATEX DE LA GRAMATICA XML
	
	public function extraerLatex() {
		$resul = $this->xml->xpath('/*');
		$this->getLatex($resul);
	}
	
	private function getLatex(Array $latexXMLlist) {
		$latexXML2 = $latexXMLlist[0];
		$this->documentclass = (string) $latexXML2->documentclass;
		$this->usepackage = (string) $latexXML2->usepackage;
		$this->configuracion = (string) $latexXML2->configuracion;
		$latexXMLl = $latexXML2->contenido;
		$latexXML = $latexXMLl[0];
		
		$this->documento['inicio'] = (string) $latexXML->inicio;
			
		$this->membrete = (string) $latexXML->membrete;
		
		$latexXMLl3 = $latexXML->encabezado;
		$latexXML3 = $latexXMLl3[0];
		$this->encabezado['inicioEncabezado'] = $latexXML3->inicio;
		$filal = $latexXML3->nombre;
		$fila = $filal[0];
		$this->encabezado['nombre']['titulo'] = $fila->titulo;
		$this->encabezado['nombre']['finfila'] = "\\\\";
		$filal = $latexXML3->cedula;
		$fila = $filal[0];
		$this->encabezado['cedula']['titulo'] = $fila->titulo;
		$this->encabezado['cedula']['finfila'] = "\\\\";
		$this->encabezado['finEncabezado'] = $latexXML3->fin;
		
		$cargaAcademical = $latexXML->cargaacadimica;
		$cargaAcademica = $cargaAcademical[0];
		$this->cargaAcadimica['encabezado'] = $cargaAcademica->titulo;
		$this->cargaAcadimica['inicio'] = $cargaAcademica->inicio;
		$this->cargaAcadimica['materiasPregrado']['inicio'] = $cargaAcademica->materiaspregrado->inicio;
		$this->cargaAcadimica['materiasPregrado']['totalHoras']['titulo'] = $cargaAcademica->materiaspregrado->texto;
		$this->cargaAcadimica['materiasPregrado']['fin'] = $cargaAcademica->materiaspregrado->fin;
		$this->cargaAcadimica['materiasPostgrado']['inicio'] = $cargaAcademica->materiaspostgrado->inicio;
		$this->cargaAcadimica['materiasPostgrado']['totalHoras']['titulo'] = $cargaAcademica->materiaspostgrado->texto;
		$this->cargaAcadimica['materiasPostgrado']['fin'] = $cargaAcademica->materiaspostgrado->fin;
		$this->cargaAcadimica['cargaTutorias']['inicio'] = $cargaAcademica->tutorias->inicio;
		$this->cargaAcadimica['cargaTutorias']['tesisPregrado']['inicio'] = $cargaAcademica->tutorias->tesispregrado->inicio;
		$this->cargaAcadimica['cargaTutorias']['tesisPregrado']['fin'] = $cargaAcademica->tutorias->tesispregrado->fin;
		$this->cargaAcadimica['cargaTutorias']['pasantias']['inicio'] = $cargaAcademica->tutorias->pasantias->inicio;
		$this->cargaAcadimica['cargaTutorias']['pasantias']['fin'] = $cargaAcademica->tutorias->pasantias->fin;
		$this->cargaAcadimica['cargaTutorias']['tesisPostgrado']['inicio'] = $cargaAcademica->tutorias->tesispostgrado->inicio;
		$this->cargaAcadimica['cargaTutorias']['tesisPostgrado']['fin'] = $cargaAcademica->tutorias->tesispostgrado->fin;
		$this->cargaAcadimica['cargaTutorias']['totalHoras']['titulo'] = $cargaAcademica->tutorias->texto;
		$this->cargaAcadimica['cargaTutorias']['fin'] = $cargaAcademica->tutorias->fin;
		$this->cargaAcadimica['cargaSC']['inicio'] = $cargaAcademica->serviciocomunitario->inicio;
		$this->cargaAcadimica['cargaSC']['totalHoras']['titulo'] = $cargaAcademica->serviciocomunitario->texto;
		$this->cargaAcadimica['cargaSC']['fin'] = $cargaAcademica->serviciocomunitario->fin;
		$this->cargaAcadimica['totalCargaAcademica']['inicio'] = $cargaAcademica->totalcargaacademica->inicio;
		$this->cargaAcadimica['totalCargaAcademica']['fin'] = $cargaAcademica->totalcargaacademica->fin;
		$this->cargaAcadimica['fin'] = $cargaAcademica->fin;
		
		$cargaInvestigacionl = $latexXML->cargainvestigacion;
		$cargaInvestigacion = $cargaInvestigacionl[0];
		$this->cargaInvestigacion['inicio'] = $cargaInvestigacion->inicio;
		$this->cargaInvestigacion['fin'] = $cargaInvestigacion->fin;
		$this->cargaInvestigacion['totalCargaAcademica']['inicio'] = $cargaInvestigacion->totalcargaacademica->inicio;
		$this->cargaInvestigacion['totalCargaAcademica']['fin'] =  $cargaInvestigacion->totalcargaacademica->fin;
		
		$cargaExtencionl = $latexXML->cargaextencion;
		$cargaExtencion = $cargaExtencionl[0];
		$this->cargaExtencion['inicio'] = $cargaExtencion->inicio;
		$this->cargaExtencion['fin'] = $cargaExtencion->fin;
		$this->cargaExtencion['totalCargaAcademica']['inicio'] = $cargaExtencion->totalcargaacademica->inicio;
		$this->cargaExtencion['totalCargaAcademica']['fin'] =  $cargaExtencion->totalcargaacademica->fin;
		
		$cargaAdministratival = $latexXML->cargaadministrativa;
		$cargaAdministrativa = $cargaAdministratival[0];
		$this->cargaAdministrativa['inicio'] = $cargaAdministrativa->inicio;
		$this->cargaAdministrativa['fin'] = $cargaAdministrativa->fin;
		$this->cargaAdministrativa['totalCargaAcademica']['inicio'] = $cargaAdministrativa->totalcargaacademica->inicio;
		$this->cargaAdministrativa['totalCargaAcademica']['fin'] =  $cargaAdministrativa->totalcargaacademica->fin;
		
		$cargaGremiall = $latexXML->cargagremial;
		$cargaGremial = $cargaGremiall[0];
		$this->cargaGremial['inicio'] = $cargaGremial->inicio;
		$this->cargaGremial['fin'] = $cargaGremial->fin;
		$this->cargaGremial['totalCargaAcademica']['inicio'] = $cargaGremial->totalcargaacademica->inicio;
		$this->cargaGremial['totalCargaAcademica']['fin'] =  $cargaGremial->totalcargaacademica->fin;
		
		$piePaginal = $latexXML->piepagina;
		$piePagina = $piePaginal[0];
		$this->piePagina['inicio'] = $piePagina->inicio;
		$this->piePagina['fin'] = $piePagina->fin;
		
		$this->documento['fin'] = (string) $latexXML->fin;
	}

	#LLENA LOS LOS CAMPOS VARIBLES DE LA GRAMATICA XML CON LOS DATOS DEL 
	#OBJETO TIPO PROFESOR
	
	public function llenarLatex($profesor) {
		$profesor->setNombre($this->caracteresLatex($profesor->getNombre()));
		$this->encabezado['nombre']['texto'] = $profesor->getNombre();
		$profesor->setCedula($this->caracteresLatex($profesor->getCedula()));
		$this->encabezado['cedula']['texto'] = $profesor->getCedula();
		$this->cargaAcadimica['materiasPregrado']['totalHoras']['horas'] = "{{\\large ".$profesor->getTotalHorasPregrado()."}}\\\\";
		$this->cargaAcadimica['materiasPostgrado']['totalHoras']['horas'] = "{{\\large ".$profesor->getTotalHorasPostgrado()."}}\\\\";
		$materiasPregrado = $profesor->getMateriasPregrado();
		$materiasPostgrado = $profesor->getMateriasPostgrado();
		
		foreach ($materiasPregrado AS $clave => $value) {
			$this->cargaAcadimica['materiasPregrado']['materias'][$clave] = "{".$value['nombreMateria'].
			"} & \multicolumn{1}{c}{".$value['totalHoras']."} & \multicolumn{1}{c}{".$value['numSecciones'].
			"} & \multicolumn{1}{c}{".$value['cargaAcademica']."}\\\\";
		}
		foreach ($materiasPostgrado AS $clave => $value) {
			$this->cargaAcadimica['materiasPostgrado']['materias'][$clave] = "{".$value['nombreMateria'].
			"} & \multicolumn{1}{c}{".$value['totalHoras']."} & \multicolumn{1}{c}{".$value['numSecciones'].
			"} & \multicolumn{1}{c}{".$value['cargaAcademica']."}\\\\";
		}
		$this->cargaAcadimica['cargaTutorias']['totalHoras']['horas'] = "{{\\large ".$profesor->getTotalHorasTutorias()."}}\\\\";
		$tutoriaPregrado = $profesor->getCargaAcadémicaTutoriasTesisPregado();
		$tutoriaPasantias = $profesor->getCargaAcadémicaTutoriasPasantias();
		$tutoriaPostgrado = $profesor->getCargaAcadémicaTutoriasTesisPostgrado();
		foreach ($tutoriaPregrado AS $clave => $value) {
			$this->cargaAcadimica['cargaTutorias']['tesisPregrado']['trabajos'][$clave] = "{".$value['tituloTrabajo']
			."} & {".$value['nombreTesista']."} & \multicolumn{1}{c}{".$value['cedulaTesista']."}\\\\";
		}
		foreach ($tutoriaPasantias AS $clave => $value) {
			$this->cargaAcadimica['cargaTutorias']['pasantias']['trabajos'][$clave] = "{".$value['tituloTrabajo']
			."} & {".$value['nombreTesista']."} & \multicolumn{1}{c}{".$value['cedulaTesista']."}\\\\";
		}
		foreach ($tutoriaPostgrado AS $clave => $value) {
			$this->cargaAcadimica['cargaTutorias']['tesisPostgrado']['trabajos'][$clave] = "{".$value['tituloTrabajo']
			."} & {".$value['nombreTesista']."} & \multicolumn{1}{c}{".$value['cedulaTesista']."}\\\\";
		}
		$this->cargaAcadimica['cargaSC']['totalHoras']['horas'] = "{{\\large ".$profesor->getTotalHorasServicioComunitario()."}}\\\\";
		$servicioComunitario = $profesor->getCargaServicioComunitario();
		foreach ($servicioComunitario AS $clave => $value) {
			$this->cargaAcadimica['cargaSC']['proyectos'][$clave] = "{".$value['nombreTutoriado']
			."} & \multicolumn{1}{c}{".$value['cedulaTesista']."} & {".$value['proyecto']."} & {".$value['comunidad']."}\\\\";
		}
		$totalHorasCargaAcademica = $profesor->getTotalHorasPregrado() + $profesor->getTotalHorasPostgrado() + $profesor->getTotalHorasTutorias() + 
		$profesor->getTotalHorasServicioComunitario();
		$this->cargaAcadimica['totalCargaAcademica']['horas'] = "{{\\large ".$totalHorasCargaAcademica."}}\\\\";
		
		$investigacion = $profesor->getCargaInvestigacion();
		$totalHorasInvestigacion = $profesor->getTotalHorasInvestigacion();
		if($investigacion['ppi'] == '1') $ppi = "Si"; elseif($investigacion['ppi'] == '0') $ppi = "No";
		if($investigacion['pei'] == '1') $pei = "Si"; elseif($investigacion['pei'] == '0') $pei = "No";
		$this->cargaInvestigacion['trabajo'] = "{".$investigacion['actividad']."} & {".$ppi."} & {".$pei."}\\\\"; 
		$this->cargaInvestigacion['totalCargaAcademica']['horas'] = "{{\\large ".$totalHorasInvestigacion."}}\\\\";
		
		$extencion = $profesor->getCargaExtencion();
		$totalHorasExtencion = $profesor->getTotalHorasExtencion();
		$this->cargaExtencion['trabajo'] = "{".$extencion['actividad']."} & {".$extencion['numOficio']."} & \\multicolumn{1}{c}{".$extencion['totalHoras']."}\\\\";
		$this->cargaExtencion['totalCargaAcademica']['horas'] = "{{\\large ".$totalHorasExtencion."}}\\\\";
		
		$administrativa = $profesor->getCargaAdministrativa();
		$totalHorasAdministrativas = $profesor->getTotalHorasAdministrativas();
		foreach ($administrativa AS $clave => $value) {
			$this->cargaAdministrativa['trabajo'][$clave] = "{".$value['actividad']
			."} & {".$value['genero']."} & \multicolumn{1}{c}{".$value['totalHoras']."}\\\\";
		}
		$this->cargaAdministrativa['totalCargaAcademica']['horas'] = "{{\\large ".$totalHorasAdministrativas."}}\\\\";
		
		$gremial = $profesor->getCargaGremial();
		$totalHorasGremial = $profesor->getTotalHorasGremial();
		foreach ($gremial AS $clave => $value) {
			$this->cargaGremial['trabajo'][$clave] = "{".$value['cargo']
			."} & \multicolumn{1}{c}{".$value['totalHoras']."}\\\\";
		}
		$this->cargaGremial['totalCargaAcademica']['horas'] = "{{\\large ".$totalHorasGremial."}}\\\\";
		
		$totalHoras = $profesor->getTotalHoras();
		$this->piePagina['horas'] = "{{\\large \\bf".$totalHoras."}}\\\\";
	}

	#UBICA CARACTERES ESPECIALES DE LATEX Y LOS SUSTITULLE POR LA EXPRECION 
	#CORRECTA PARA EVITAR ERRORES EN LA COMPILACION
	
	private function caracteresLatex($cadena) {
		$cadena = preg_replace('/%/', '\\\\\%', $cadena);
		$cadena = preg_replace('/{/', '\\\\\{', $cadena);
		$cadena = preg_replace('/}/', '\\\\\}', $cadena);
		$cadena = preg_replace('/~/', '$\\\\\~$', $cadena);
		$cadena = preg_replace('/\$/', '$\\\\\\\$$', $cadena);
		return $cadena;
	}

}
?>
